查看原文
其他

快速学会一个算法,CNN

程序员小寒 程序员学长
2024-09-13
大家好,我是小寒
今天给大家介绍一个强大的算法模型,卷积神经网络
卷积神经网络(Convolutional Neural Network,简称CNN)是一类特别适用于处理具有网格结构数据的深度学习模型,例如图像数据。
CNN在计算机视觉、图像分类、对象检测等领域表现尤为出色。

CNN 的基本构成

卷积神经网络主要由以下层组成。

卷积层

卷积层是 CNN 的核心组件,用于提取输入数据的特征。

卷积层通过滤波器(卷积核)在输入数据上滑动,进行卷积操作,生成特征图(Feature Map)。每个卷积核负责捕捉图像的不同特征,如边缘、纹理等。


  1. 卷积核,一个小的矩阵,通常为 3x3、5x5 等,它在图像上滑动,对应位置的像素进行逐元素相乘并求和。
  2. 步幅(stride),卷积核在输入图像上滑动的步长,步幅越大,输出的特征图尺寸越小。
  3. 填充(padding),为保持卷积后特征图的尺寸,可以在输入图像边缘添加额外的像素。
下面显示了 CNN 如何执行步幅和填充等于 1 的卷积操作。


池化层(Pooling Layer)

池化层通常用于降低特征图的空间尺寸(高度和宽度),减少参数数量和计算复杂性,同时使特征检测更加鲁棒。
最常见的池化操作是最大池化和平均池化。
  • 最大池化,从特征图的每个窗口取最大值

  • 平均池化,从特征图的每个窗口取平均值

全连接层(Fully Connected Layer)

在多个卷积和池化层之后,网络通常包含一个或多个全连接层,用于基于提取的特征进行最终的分类或其他预测任务。

这些层将扁平化的特征图作为输入。

下面,我们通过一个具体的案例来进行说明,假设我们创建一个卷积神经网络模型,该模型用于确定图像是否代表 X。

对于一张图像来说,我们都知道它是由一个个像素组成的。

由于我们的 X 是一张简单的黑白图像,我们将每个像素指定为 1(代表黑色像素)或 0(代表白色像素)。

过滤器/卷积核

让我们首先在所有 “X” 图像中找到一些一致的模式。例如,一个可能的模式可能是。

然后我们可以通过确认图像中存在这个图案来确定图像是一个“X”。

这种模式在这里被称为过滤器。过滤器捕捉 X 的一个关键特征。

过滤器通常是小的方阵,最常见的是 3x3 像素,但大小可以有所不同。

要将过滤器应用于图像以进行模式检测,我们将 3x3 过滤器滑过每个部分,并计算过滤器与其覆盖的部分的点积。

然后我们向这个输出矩阵添加一个偏差项。

其结果就是产生了特征图。然后,此特征图中的每个值都会通过 ReLU 激活函数。
以下是 ReLU 的公式:

如果输入大于 0,则函数按原样输出该值;如果输入小于或等于 0,则输出 0。

因此,通过将特征图传递给 ReLU 函数,我们得到以下更新的特征图。

在这种情况下,除中间的一个单元格外,所有单元格都设置为 0。
下面,我们来总结一下卷积过程,首先,从 X 的输入图像开始。

然后将过滤器与图像进行卷积。

随后,将偏差项添加到卷积矩阵中以创建特征图。

最后,我们通常将此特征图传递给 ReLU 函数以获得更新的特征图。

卷积步骤的主要目的是减少输入大小(从整个图像到特征图)以简化处理。
一个合理的问题是,我们是否因为生成的特征图矩阵中的值减少而丢失了大量信息。确实,我们的值确实减少了,但过滤器旨在检测图像的某些组成部分或特征并消除所有不必要的信息。
与前面提到的过滤器类似,我们可以使用其他过滤器来检测其他特征。例如,我们可以使用这个过滤器。

可以检测以下模式。

因此,如果我们使用与上述相同的过程应用多个过滤器,我们将获得来自同一输入图像的特征图集合。

池化

现在我们的特征图已经准备好了,我们可以进入下一步,池化。这一步很简单。
我们只需扫描之前创建的特征图,选择 2x2 的小部分,然后从每个部分中选择最大值。

最大池化主要用于进一步降低图像中的噪声。

全连接层

将这些值输入全连接层的第一步是展平特征图矩阵。

我们不能按原样输入特征图。因此,我们将其展平。

例如,如果我们有四个过滤器,它们将产生四个特征图。

然后,这些特征图又会从最大池化步骤产生四个 2x2 矩阵。

它们展平后的样子如下:

然后我们可以使用扁平化的输出作为全连接层的输入。

接下来就进行终的分类或其他预测任务。

最后



今天的分享就到这里。如果觉得近期的文章不错,请点赞,转发安排起来。‍‍欢迎大家进高质量 python 学习群

「进群方式:加我微信,备注 “python”」



往期回顾


Fashion-MNIST 服装图片分类-Pytorch实现

python 探索性数据分析(EDA)案例分享

深度学习案例分享 | 房价预测 - PyTorch 实现

万字长文 |  面试高频算法题之动态规划系列

面试高频算法题之回溯算法(全文六千字)  

    



如果对本文有疑问可以加作者微信直接交流。

继续滑动看下一个
程序员学长
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存